import time
import pyautogui
import pyperclip  # 用于复制粘贴操作
from openpyxl import load_workbook
from pynput import keyboard as pynput_keyboard
from datetime import datetime  # 用于获取当前时间

# 定义屏幕坐标位置
COORDS = {
    "新增按钮": (305, 508),  # 新增按钮
    "子分公司": (432, 329),  # 子分公司
    "发电企业": (1008, 330),  # 发电企业
    "服务单位": (1563, 329),  # 服务单位
    "监督专业": (425, 390),  # 监督专业
    "产业类型": (1003, 387),  # 产业类型
    "问题描述": (511, 443),  # 问题描述
    "告警依据": (482, 516),  # 告警依据
    "告警级别": (412, 575),  # 告警级别
    "告警来源": (868, 568),  # 告警来源
    "可能或已造成后果": (662, 694),  # 可能或已造成后果
    "整改要求": (624, 760),  # 整改要求
}

# 加载Excel文件并跳过表头
def load_excel_data(file_path):
    workbook = load_workbook(file_path)
    sheet = workbook["Sheet1"]
    data = []
    for i, row in enumerate(sheet.iter_rows(values_only=True)):
        if i == 0:  # 跳过第一行（表头）
            continue
        # 确保每个单元格的内容都转换为字符串
        processed_row = [str(cell).strip() if cell is not None else "" for cell in row]
        data.append(processed_row)
    return data

# 显示倒计时窗口，并打印等待时间和计时开始时间
def countdown(seconds):
    print("程序即将开始运行，以下是倒计时：")
    start_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 记录计时开始时间
    print(f"计时开始时间: {start_time}")
    for i in range(seconds, 0, -1):
        print(f"等待 {i} 秒...")
        time.sleep(1)
    end_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 记录倒计时结束时间
    print(f"倒计时结束时间: {end_time}")
    print("倒计时结束，程序开始运行！")

# 全局变量，用于控制暂停和继续
pause_program = True  # 初始状态为暂停

# 键盘事件监听器
def on_press(key):
    global pause_program
    try:
        # 检测 Alt+K 继续
        if key == pynput_keyboard.Key.alt_l or key == pynput_keyboard.Key.alt_r:
            print("检测到 Alt 键按下，等待 = 键...")
            return  # 等待后续按键
        elif hasattr(key, 'char') and key.char.lower() == '=':
            print("检测到 Alt+=，继续处理下一行数据...")
            pause_program = False
    except AttributeError:
        pass

# 执行自动化操作
def process_row(row):
    global pause_program

    # 检查当前行数据是否为空
    if not any(row):  # 如果当前行所有单元格都为空
        print("检测到当前行数据为空，程序停止运行。")
        exit(0)  # 停止程序运行

    # 打印当前处理的行数据
    print(f"正在处理的数据: {row}")

    # 点击“+新增”按钮
    pyautogui.click(COORDS["新增按钮"])
    time.sleep(2)  # 等待新增界面加载完成

    # 定义字段和对应的坐标
    fields = [
        ("子分公司", COORDS["子分公司"]),
        ("发电企业", COORDS["发电企业"]),
        ("服务单位", COORDS["服务单位"]),
        ("监督专业", COORDS["监督专业"]),
        ("产业类型", COORDS["产业类型"]),
        ("问题描述", COORDS["问题描述"]),
        #("告警依据", COORDS["告警依据"]) 由于写入时存在问题，写入顺序
        ("告警级别", COORDS["告警级别"]),
        ("告警来源", COORDS["告警来源"]),
        ("告警依据", COORDS["告警依据"]),
        ("可能或已造成后果", COORDS["可能或已造成后果"]),
        ("整改要求", COORDS["整改要求"]),
    ]

    # 遍历字段并写入数据
    for i, (field_name, coord) in enumerate(fields):
        pyautogui.click(coord)  # 点击输入框
        time.sleep(0.5)  # 确保点击生效
        # 清空输入框内容
        pyautogui.hotkey("ctrl", "a")  # 全选
        pyautogui.press("backspace")  # 删除
        time.sleep(0.5)  # 确保清空操作完成
        if row[i]:  # 如果字段不为空
            pyperclip.copy(row[i])  # 将数据复制到剪贴板
            pyautogui.hotkey("ctrl", "v")  # 模拟 Ctrl+V 粘贴
            print(f"写入{field_name}: {row[i]}")
        else:
            print(f"{field_name}字段为空，跳过写入。")
        time.sleep(0.5)  # 等待输入框更新

    # 提示用户完成一行数据的操作
    print("第一行数据操作完成，请按 Alt+= 继续处理下一行数据...")
    pause_program = True  # 设置暂停状态
    while pause_program:
        time.sleep(0.1)  # 等待用户按下 Alt+K

# 主函数
def main():
    file_path = r"D:\2025年技术监督问题清单\告警录入\2025年告警录入清单_【禁止删除_重要】.xlsx"
    data = load_excel_data(file_path)
    
    # 获取起始行号
    while True:
        try:
            start_row = pyautogui.prompt(
                text='请输入起始行号（从2开始）',
                title='行号选择',
                default='2'
            )
            if start_row is None:
                print("用户取消输入，程序退出")
                exit(0)
                
            start_index = int(start_row) - 2
            if start_index < 0 or start_index >= len(data):
                pyautogui.alert(f"请输入2-{len(data)+1}之间的有效行号")
                pyautogui.alert(f"请输入2-{len(data)+1}之间的有效行号")
                continue
            break
        except ValueError:
            pyautogui.alert("请输入有效的数字格式")
    
    # 启动键盘监听器
    listener = pynput_keyboard.Listener(on_press=on_press)
    listener.start()
    # 倒计时提示
    countdown(5)
    # 从指定行开始遍历数据
    for i, row in enumerate(data[start_index:], start=start_index+1):
        print(f"正在处理第 {i} 行数据...")
        process_row(row)
    print("所有数据处理完成！")
    listener.stop()

if __name__ == "__main__":
    main()